//
//  main.m
//  03-集合
//
//  Created by dllo on 16/7/6.
//  Copyright © 2016年 高雅馨. All rights reserved.
//

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
   
    /**
     *  1. 数组: 可变数组NSMutableArray和不可变数组NSArray
            主要是有序的存放元素的集合类型,并且可以通过下标取值;不可变只能取值,可变可以增删改操作;数组中只能存放对象类型
     * 2. 初始化数组
       <1> initWithObjects 后面填入的参数一定是对象类型
             可变参数 C语言中的链表(后续讲)
             顺序填入你需要的元素
     */
    NSArray *arr = [[NSArray alloc] initWithObjects:@"666", @"888", @"999", nil];
    /**
     *  <2> 构造器方法
     */
    NSArray *array = [NSArray arrayWithObjects:@"777", @"888", @"999", nil];
    /**
     *  <3> 字面量(推荐) 同 NSString @"" NSNumer @() NSArray@[]
       可以识别对象是否为空,一般初始化方法不可以,如果为空,字面量会崩溃 但是,数据丢失
     */
    NSArray *myArr = @[@"666", @"777", @"888", @"999"];
    /**
     *  3. 取值相关
     * <1> count 取值数组中元素个数
     */
    NSLog(@"%ld", arr.count);
    /**
     *  <2> 数组中取值,通过下标去取值
     */
    NSString *numberString = [arr objectAtIndex:0];
    /**
     *  <3> 语法糖 取值方式 快捷取值
     */
    NSString *numberStr = arr[0];
    /**
     *  <4> 根据值取对应的下标
     */
   NSUInteger indexOfObject = [arr indexOfObject:@"666"];
    NSLog(@"%lu", indexOfObject);
    /**
     *  <5> 判断对象是否存在与数组中
     */
    bool isHaveObject = [arr containsObject:@"666"];
    NSLog(@"%@", isHaveObject ? @"yes" : @"no");
    /**
     *  <6> 取数组中第0为的元素 / 取数组中最后一个元素(如果数组为空, 返回的对象为空, 并且不会崩溃)
     */
    [arr firstObject];
    [arr lastObject];
    /**
     *  4. 不可变数组改变元素(会生成新的数组, 不会在原数组基础之上修改)
     * <1> 数组添加一个新的元素
     */
    [arr arrayByAddingObject:@"888"];
    /**
     *  <2> 数组添加另外一个数组中的所有元素
     */
    [arr arrayByAddingObjectsFromArray:array];
    NSLog(@"%@", arr);
    
    /**
     *  可变数组NSMutableArray
     * 1. 初始化方法前两个同不可变数组  遇到可变数组,只能使用初始化方法或者遍历构造器  字面量创建方法不推荐使用
     NSMutableArray *mutableArray =  [@[] mutableCopy];
     * 2. 取值相关 与不可变数组一样
     * 3. 可变数组改变元素
     * <1> 数组中添加元素 addObject
     */
    NSMutableArray *mutableArr = [NSMutableArray array];
    [mutableArr addObject:@"123"];
    /**
     *  <2> 数组中插入元素
     */
    [mutableArr insertObject:@"含蓄" atIndex:0];
    /**
     *  <3> 移除
     */
    [mutableArr removeObjectAtIndex:0];
 //   [mutableArr removeLastObject];
 //   [mutableArr removeAllObjects];
    /**
     *  <4> 替换(使用替换时, 数组对应位置不能为空)
     */
    [mutableArr replaceObjectAtIndex:0 withObject:@"麦兜"];
    NSLog(@"%@", mutableArr);
    /**
      * 1. 可变是可以修改的, 但不可变不可以
      * 2. 不可变调用改变的方法时, 会生成新的对象; 可变调用改变方法时, 对象本身发生改变
      * 3. 可变:不可变
     */
    // 将字符串根据某个子串截取成数组
    NSString *strSP = @"20|http://www.baidu.com";
    NSArray *strCP =
    [strSP componentsSeparatedByString:@"|"];
    NSLog(@"%@",strCP);
    NSArray *nameArray = @[@"麦兜", @"🙈", @"猪猪"];
   NSString *nameString = [nameArray componentsJoinedByString:@"&"];
    NSLog(@"%@", nameString);

        return 0;
}
